home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / graphic / rcdsplay.zip / DISPLAY.PAS < prev    next >
Pascal/Delphi Source File  |  1991-05-23  |  5KB  |  142 lines

  1.  
  2. {**************************************************************************
  3.  TITLE    : DISPLAY
  4.  VERSION  : 2.1
  5.  FUNCITON : Displays a data file by the GRAFED procedure.
  6.  INPUTS   :
  7.  OUTPUTS  : Graphics display of xy data.
  8.  NOTES    :
  9.  AUTHOR   : Roger Carlson (based upon that of M. Riebe and R. Carlson
  10.             written for the IBM CS9000 computer)  5/29/90
  11.  CHANGES  : 6/2/90 (RJC,1.1) - Verison 1.1 of GRAFED.
  12.             6/3/90 (RJC,1.2) - Version 1.2 of GRAFED.
  13.             6/9/90 (RJC,1.3) - Version 1.3 of GRAFED.  Prevented genera-
  14.               tion of test data file if it already exists.
  15.             6/12/90 (RJC,1.4) - Version 1.4 of GRAFED.
  16.             8/18/90 (RJC,1.5) - Version 1.5 of GRAFED.
  17.             3/23/91 (RJC,1.6) - Version 1.6 of GRAFED.
  18.             3/28/91 (RJC,1.7) - Version 1.7 of GRAFED.
  19.             5/2/91  (RJC,1.8) - Version 1.8 of GRAFED.
  20.             5/4/91  (RJC,1.9) - Version 1.9 of GRAFED.
  21.             5/9/91  (RJC,2.0) - Version 2.0 of GRAFED.
  22.             5/23/91 (RJC,2.1) - Version 2.1 of GRAFED.
  23. *************************************************************************}
  24.  
  25. {$I-}  {disable IO checking}
  26. {$M 16384,0,70000}
  27.  
  28. PROGRAM DISPLAY;
  29.  
  30. USES GRAFED, {version 2.1}
  31.      IOFUNCS,{version 1.5}
  32.      CRT;
  33.  
  34. CONST VERSION=2.1;
  35.  
  36. VAR
  37.   DATA     : DARRAY;    {first index =1 is x, 2 is y}
  38.   FILENAME : STR20;     {name of the data file}
  39.   J        : INTEGER;   {loop variable}
  40.   NUMPTS   : INTEGER;   {number of points in data array}
  41.   RECEIVED : BOOLEAN;   {flags successfull reading of data}
  42.   X,Y      : REAL;      {temporary x and y values}
  43.   XINC,YINC: REAL;      {x and y axis margin}
  44.   XMIN,XMAX: REAL;      {min and max of x data}
  45.   YMIN,YMAX: REAL;      {min and max of y data}
  46.  
  47. PROCEDURE GEN_DATA(VAR DATA:DARRAY; VAR NUMPTS:INTEGER;
  48.                    VAR RECEIVED:BOOLEAN);
  49. VAR I:INTEGER;
  50.     OUTFILE:TEXT;
  51. BEGIN
  52.   ASSIGN(OUTFILE,'TEST.DAT'); REWRITE(OUTFILE);
  53.   NUMPTS:=101;
  54.   FOR I:=1 TO NUMPTS DO BEGIN
  55.     DATA[1,I]:=(I-1)*2*3.14/NUMPTS; DATA[2,I]:=1000000*SIN(DATA[1,I]);
  56.     DATA[1,I]:=DATA[1,I]*10000;
  57.     WRITELN(OUTFILE,DATA[1,I],' ',DATA[2,I]);
  58.   END; {FOR}
  59.   CLOSE(OUTFILE);
  60.   RECEIVED:=TRUE;
  61. END; {GET_DATA}
  62.  
  63. PROCEDURE GET_DATA(VAR DATA:DARRAY; VAR NUMPTS:INTEGER; VAR FILENAME:STR20;
  64.                    VAR RECEIVED:BOOLEAN);
  65. VAR
  66.   ERR      : INTEGER;   {error flag}
  67.   INFILE   : TEXT;      {input file}
  68.   QUIT     : BOOLEAN;   {flag to abort procedure}
  69. BEGIN
  70.   REPEAT {until RECEIVED of QUIT}
  71.     RECEIVED:=FALSE;
  72.     WRITELN;
  73.     WRITE('Name of the data file (carriage return to quit): ');
  74.       READLN(FILENAME);
  75.     IF FILENAME='' THEN QUIT:=TRUE
  76.     ELSE BEGIN
  77.       QUIT:=FALSE;
  78.       IF NOT EXISTS(FILENAME) THEN BEGIN
  79.         BEEP(200); WRITELN('No such file!');
  80.         END; {IF}
  81.       END; {ELSE}
  82.     IF NOT(QUIT) AND EXISTS(FILENAME) THEN BEGIN
  83.       NUMPTS:=0;
  84.       ASSIGN(INFILE,FILENAME); ERR:=IORESULT; RESET(INFILE);
  85.       IF ERR<>0 THEN BEGIN
  86.         CLOSE(INFILE);
  87.         WRITELN('IO error number ',ERR);
  88.         END {IF}
  89.       ELSE BEGIN
  90.         WHILE NOT(EOF(INFILE)) AND (ERR=0) AND (NUMPTS<MAXPTS) DO BEGIN
  91.           NUMPTS:=NUMPTS+1;
  92.           READLN(INFILE,DATA[1,NUMPTS],DATA[2,NUMPTS]); ERR:=IORESULT;
  93.           IF (NUMPTS MOD 10) = 0 THEN WRITE('*');
  94.         END; {WHILE}
  95.         WRITELN;
  96.         IF (NUMPTS=MAXPTS) AND NOT(EOF(INFILE)) THEN BEGIN
  97.           BEEP(200);
  98.           WRITELN('Too many data points!  Only the first ',MAXPTS,
  99.                   ' will be displayed.');
  100.           WRITE('Hit <ENTER> to continue.'); READLN;
  101.           END; {IF}
  102.         CLOSE(INFILE);
  103.         IF ERR<>0 THEN BEGIN
  104.           BEEP(200);
  105.           WRITELN('Input file has wrong format!'); NUMPTS:=0;
  106.           END; {IF}
  107.         END; {ELSE}
  108.       IF NUMPTS>0 THEN RECEIVED:=TRUE;
  109.       END; {IF}
  110.   UNTIL RECEIVED OR QUIT;
  111. END; {GET_DATA}
  112.  
  113. BEGIN
  114.   CLRSCR;
  115.   WRITELN('Program DISPLAY - Version',VERSION:4:1);
  116.   WRITELN('Complements of Roger J. Carlson and Michael T. Riebe.');
  117.   WRITELN;
  118.   WRITELN('This program reads a text file of up to ',MAXPTS,' xy data');
  119.   WRITELN('points and displays that data graphically on most PCs.');
  120.   WRITELN;
  121.   WRITELN('Bytes of memory available: ',MEMAVAIL);
  122.   IF NOT EXISTS('TEST.DAT') THEN GEN_DATA(DATA,NUMPTS,RECEIVED);
  123.   REPEAT
  124.     GET_DATA(DATA,NUMPTS,FILENAME,RECEIVED);
  125.     IF RECEIVED THEN BEGIN
  126.       YMAX:=DATA[2,1]; YMIN:=DATA[2,1];
  127.       XMIN:=DATA[1,1]; XMAX:=DATA[1,NUMPTS];
  128.       FOR J:=1 TO NUMPTS DO BEGIN
  129.         Y:=DATA[2,J]; X:=DATA[1,J];
  130.         IF Y>YMAX THEN YMAX:=Y; IF Y<YMIN THEN YMIN:=Y;
  131.         IF X>XMAX THEN XMAX:=X; IF X<XMIN THEN XMIN:=X;
  132.         END; {IF}
  133.       YINC:=(YMAX-YMIN)/20; IF YINC=0 THEN YINC:=1;
  134.       YMAX:=YMAX+YINC;      YMIN:=YMIN-YINC;
  135.       XINC:=(XMAX-XMIN)/40; IF XINC=0 THEN XINC:=1;
  136.       XMIN:=XMIN-XINC;      XMAX:=XMAX+XINC;
  137.       GRAF(DATA,FILENAME,XMIN,XMAX,YMIN,YMAX,NUMPTS);
  138.       CLRSCR;
  139.       END; {IF}
  140.   UNTIL RECEIVED=FALSE;
  141.   CLRSCR;
  142. END.